/** 行类型 */
export enum ETableRowType{
  CODE = 0, EMPTY = 1, COMMENT = 2, MULTILINE_COMMENT_START = 3, MULTILINE_COMMENT_END = 4, MULTILINE_COMMENT = 5, OTHER = 6,
}



export enum EInOut{
  IN = 0, OUT = 1,
}


export interface ICodeRow{
  lineIndex: number; // 码表在文件中的行号
  text: string; // 词
  code: string; // 码，在读取时分割符已转为空格
  weight: string; // 权重
  stem: string; // 造词码，可利用单字的编码中提取部分编码来组合成新词的编码，一般来说，造词码等于code
  originalSeparator: string; // 原始分割符
}


export type  OnLog = ( messages: string[] ) => void;


/** 字典行 */
export interface ITableRow{
  rowType: ETableRowType; // 行类型
  originalRow: string; // 原始值，当码表行存在时，原始值将会被抛弃
}


declare global{
  interface Window{
    api: {
      fetchDirectory: ( isDefault: boolean ) => Promise<{
        fileName: string;
        fileFullPath: string
      }[]>;
      fetchDict: ( filePath: string ) => Promise<ICodeTableData>;
      saveDict: ( filePath: string, lines: string[] ) => Promise<string>;
      registerOnLog: ( onLog: OnLog ) => void
    };
  }
}


export interface ICodeTableData{
  filePath: string; // 码表目录
  content: ITableRow[]; // 码表全部内容
  codeRows: ICodeRow[]; // 码表
}
